--串口调试FPGA的LLCOM脚本示例


-------------------------------------- 指令格式 ----------------------------------------
--| 指令头[一个字节]   | 指令编号[一个字节]   | 指令数据段[4个字节]  | 指令尾[一个字节]    |
--| :--------------:  | :----------------: | :-----------------: | :--------------:  |
--|       0xAA        |       0-255        |         --          |       0x55        |
---------------------------------------------------------------------------------------

---------------------------------------
--函数名:int2hex
--功能 ：32位int的十进制标志转8位十六进制
-- 表示
--例如：12 --> 0000000c  
-- -12 --> fffffff4
---------------------------------------
function int2hex(x)
    local b32HH = (x >> 24) & 0xff;
    local b32HL = (x >> 16) & 0xff;
    local b32LH = (x >>  8) & 0xff;
    local b32LL = (x      ) & 0xff;
    local a = string.format("%02x",b32HH)
    local b = string.format("%02x",b32HL)
    local c = string.format("%02x",b32LH)
    local d = string.format("%02x",b32LL)
    local e=a..b..c..d
    return e
end
---------------------------------------
--函数名:char2hex
--功能 ：十进制char转16进制
--输入： 0-255 
--例如: 12  --> 0c  
--     -12  --> f4
---------------------------------------
function char2hex(x)
    x= x & 0xff;
    return string.format("%02x",x)
end


--注册串口接收函数
uartReceive = function (data)
	-- 将接收到的4个字节的数据合成int数据
	local dataHex,_ = string.toHex(data)  --将接收到的数据转为十六进制字符串
	dataHex = '0x'..dataHex
	local dataDec =  string.format("%d",dataHex)
	if ((dataDec>>31) & 1 == 1 ) then 
		dataDec = 0xffffffff00000000 | dataDec
	end 
    log.info("uartReceive",dataDec)
    sys.publish("UART",data)--发布消息
end


---------------------------------------
--函数名:SendCmd
--功能 ：发送一次指令，运行该脚本后可以使用该函数进行调试
--@param1： 0-255 
--@param2： int型数据
---------------------------------------
function SendCmd(cmd,data)
	local str = char2hex(170)..char2hex(cmd)..int2hex(data)..char2hex(85)
	str=string.fromHex(str)
	log.info("SendCmd",apiSendUartData(str),"cmd="..cmd,"cmd_data="..data)
end

---------------------------------------
--函数名:sd
--功能 ：发送一次指令，运行该脚本后可以使用该函数进行调试
--@param1： 0-255 
--@param2： int型数据
---------------------------------------
function sd(cmd,data)
	local str = char2hex(170)..char2hex(cmd)..int2hex(data)..char2hex(85)
	str=string.fromHex(str)
	log.info("SendCmd",apiSendUartData(str),"cmd="..cmd,"cmd_data="..data)
end

---------------------------------------
--函数名:pwm_t
--功能 ：设置pwm的周期
--@param1： 0-255 
--@param2： int型数据
---------------------------------------
function pwm_t(data) 
    SendCmd(3,data) 
end 



sys.taskInit(function ()
	local cmd=1
    local cmd_data=12
    local cnt = 10
    local str=""
    while (cnt>0) do    --true do
        cnt = cnt - 1
    end
end)












